package Controleur;

import Events.Evenement;
import modele.Modele;
import modele.Snapshot;

/******************************************************
Cours : LOG120 
Session : E2011
Groupe : 01
Projet : Laboratoire #4
�tudiant(e)(s) : Sean Blahovici
Mathieu Ferchaud
Code(s) perm. : BLAS30068807

Professeur : Chamseddine Talhi
Charg� de labo : Eric Goulet
Nom du fichier : Controleur.java
Date cr�� : 2011-07-21
Date dern. modif. 2011-07-21
*******************************************************
Historique des modifications
*******************************************************
2011-07-21 Version initiale (1)
*******************************************************/
public class Controleur {
	
	Modele modele = new Modele(); //Le modele de ce controleur (pour une vue)
	Historique historique = new Historique(); //L'historique de ce controleur
	
	/**
	 * Controleur par defaut
	 */
	public Controleur(){

	}
	
	/**
	 * Methode qui execute un evenement
	 * @param evenement l'evenement a executer
	 */
	public void executeEvent(Evenement evenement){
		evenement.getExecuter().execute();
		historique.addSnapShot(modele.createSnapshot());
	}
	
	/**
	 * Methode permettant d'ajouter un snapshot du modele courant a l'historique
	 */
	public void addToHistory(){
		historique.addSnapShot(modele.createSnapshot());
	}
	
	/**
	 * Methode retournant le dernier snapshot sauve dans l'historique
	 * @return Le dernier SnapShot de l'historique
	 */
	public Snapshot undoFromHistory(){
		return historique.getPreviousSnapShot();
	}
	
	public Snapshot redoFromHistory(){
		return historique.getNextSnapshot();
		
	}
	
	public Snapshot getLatestSnapshot(){
		return historique.getLatestSnapshot();
	}
	
	/**
	 * Accesseur du modele controle par ce controleur
	 * @return Le modele controle par ce controleur
	 */
	public Modele getModele(){
		return modele;
	}
	
	
}
